package br.com.ia.controle;

import br.com.ia.bean.Host;
import br.com.ia.bean.Aresta;
import br.com.ia.bean.Rede;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 *
 * @author frc.0705518
 */
public class GerenciaArquivos {

    private List<String> listRotulos;
    private List<String> listCustos;
    private Rede rede;
    private int cont;

    /** Creates a new instance of GerenciaArquivos */
    public GerenciaArquivos() {

        listRotulos = new ArrayList<String>();
        listCustos = new ArrayList<String>();
        rede = new Rede();
    }

    public Rede leAquivo(File file) {

        try {

            BufferedReader in = new BufferedReader(new FileReader(file));

            String linha = null;

            cont = 0;

            while (in.ready()) {

                linha = in.readLine();

                cont++;

                if (isPar(cont)) {

                    listCustos.addAll(Arrays.asList(linha.split(":")));

                    System.out.println(" Host " + listRotulos.get(0) + " encontrado.");

                    Host h = rede.getHosts().get(listRotulos.get(0));

                    if (h == null) {
                        System.out.println(" Criando o host " + listRotulos.get(0) + ".");
                        h = new Host(listRotulos.get(0), "");
                    }

                    listRotulos.remove(0);

                    System.out.println(" Adicionando Arestas.");

                    for (int i = 0; i < listCustos.size(); i++) {

                        System.out.println(" Host " + listRotulos.get(i) + " encontrado.");

                        Host h2 = rede.getHosts().get(listRotulos.get(i));

                        if (h2 == null) {
                            System.out.println(" Criando o host " + listRotulos.get(i) + ".");
                            h2 = new Host(listRotulos.get(i), "");
                        }

                        h.getArestas().add(new Aresta(Integer.parseInt(listCustos.get(i)), h2));

                        h2.getArestas().add(new Aresta(Integer.parseInt(listCustos.get(i)), h));

                        System.out.println(" Criando aresta " + h.getRotulo() + " on " + h2.getRotulo() + " custo " + listCustos.get(i));

                        System.out.println(" Adicionando o host " + h2.getRotulo() + " no Map.");

                        rede.getHosts().put(h2.getRotulo(), h2);
                    }

                    System.out.println(" Adicionando o host " + h.getRotulo() + " no Map.");
                    rede.getHosts().put(h.getRotulo(), h);

                    listRotulos = new ArrayList<String>();
                    listCustos = new ArrayList<String>();

                } else {

                    listRotulos.addAll(Arrays.asList(linha.split(":")));
                }

            }

            in.close();

        } catch (IOException ex) {
            new Throwable(ex.getCause()).fillInStackTrace();
        }

        return rede;
    }

    private boolean isPar(int number) {

        return (number % 2 == 0) ? true : false;
    }
}
